#!/bin/bash
# 前提1：配置计划任务00,15,30,45 * * * * /usr/sbin/mysql_bak.sh
# 前提2：安装mysql、perl-DBD-MySQL、percona+配置percona
# 前提3：手动建立备份目录mkdir -p "/db_bak/${CURDATE}/${CURDATE}_${CURHOUR}/${CURDATE}_${CURHOUR}_00"

# 强制使用英文环境（避免 locale 影响日期格式）
export LC_ALL=C

# 定义变量
DBHOST='127.0.0.1'
DBPORT=3306
DBUSER='root'
DBPASSWORD='123456'
DATADIR="/var/lib/mysql/"
CURDATE=$(/bin/date +%Y_%m_%d)
CURHOUR=$(/bin/date +%H)
CURMINUTE=$(/bin/date +%M)
XDB="/usr/local/percona/bin/xtrabackup"
DBBAK_DIR="/db_bak"

# 调试输出
echo "当前日期：${CURDATE}"
echo "当前小时：${CURHOUR}"
echo "当前分钟：${CURMINUTE}"

# 创建备份目录
mkdir -p "${DBBAK_DIR}/${CURDATE}/${CURDATE}_${CURHOUR}"

# 定义全量和增量目录
BASE_DIR="${DBBAK_DIR}/${CURDATE}/${CURDATE}_${CURHOUR}/${CURDATE}_${CURHOUR}_00"
TARGET_DIR="${DBBAK_DIR}/${CURDATE}/${CURDATE}_${CURHOUR}/${CURDATE}_${CURHOUR}_${CURMINUTE}"

# 执行备份
if [ "${CURMINUTE}" = "00" ]; then
  echo "执行全量备份到 ${BASE_DIR} ..."
  ${XDB} --host="${DBHOST}" --port="${DBPORT}" --user="${DBUSER}" --password="${DBPASSWORD}" \
         --backup --datadir="${DATADIR}" --target-dir="${BASE_DIR}"
else
  echo "执行增量备份到 ${TARGET_DIR} ..."
  if [ ! -d "${BASE_DIR}" ]; then
    echo "错误：基准目录 ${BASE_DIR} 不存在！"
    exit 1
  fi
  ${XDB} --host="${DBHOST}" --port="${DBPORT}" --user="${DBUSER}" --password="${DBPASSWORD}" \
         --backup --datadir="${DATADIR}" --target-dir="${TARGET_DIR}" \
         --incremental-basedir="${BASE_DIR}"
fi

# 检查结果
if [ $? -eq 0 ]; then
  echo "备份成功。"
else
  echo "备份失败！"
  exit 1
fi


